package com.fe.class02;

/**
 * @Description 提取整形数最右侧的1
 * @Author sosuke :-)
 * @Date 2021/12/3 05:54
 */
public class Code03_RightestBitOne {

    public static void main(String[] args) {
        int a = 22;
        System.out.println(Integer.toBinaryString(a));
        System.out.println(Integer.toBinaryString(~a));
        System.out.println(Integer.toBinaryString(~a+1));
        System.out.println(Integer.toBinaryString(-a));
        // ~a + 1 = -a
        /**
         * 10110
         * 01001
         * 取反：是把这个数左侧的位都取反，最右侧的1打散到右侧的位上；
         * 01001
         * 加1：将右侧的
         */
        // a & -a = a这个数最右侧的1
        System.out.println(Integer.toBinaryString(a & -a));
    }
}
